package com.linkai.多线程._05_State;

/**
 * @Description: 测试礼让线程
 *                礼让不一定成功，看CPU心情
 * @Author: 林凯
 * @Date: 2021/10/19 20:11
 */
public class TestYield {
    public static void main(String[] args) {
        MyYield myYield = new MyYield();
        new Thread(myYield, "a").start();
        new Thread(myYield, "b").start();
    }
}

class MyYield implements Runnable {
    @Override
    public void run() {
        /*
        Thread.yield()方法作用是：暂停当前正在执行的线程对象，并执行其他线程。

        yield()应该做的是让当前运行线程回到可运行状态，以允许具有相同优先级的其他线程获得运行机会。
        因此，使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。
        但是，实际中无法保证yield()达到让步目的，因为让步的线程还有可能被线程调度程序再次选中。

        结论：yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下，
              yield()将导致线程从运行状态转到可运行状态，但有可能没有效果。
        * */
        System.out.println("线程 " + Thread.currentThread().getName() + " start");
        Thread.yield();     // 线程礼让
        System.out.println("线程 " + Thread.currentThread().getName() + " end");
    }
}
